今天执行 git pull 命令,突然要求必须输入密码,开始以为是公钥和GitHub上的不匹配了。后来经过了以下几个步骤的操作确认
一、重新生成密钥对,并将公钥配置到GitHub中,发现不起作用
这个过程搞清楚了要想本地免密执行Git命令,只需要配置密钥就可以,步骤如下:
1、在 ~/.ssh 目录下执行生成密钥,执行完之后,会生成两个文件 id_ed25519和 id_ed25519.pub两个文件
1 | $ ssh-keygen -t ed25519 -C "[email protected]" |
这里 your_email@example.com 可以是任意字符串,不一定必须是邮箱。
2、将 id_ed25519.pub的内容复制到 GitHub “Settings”->”SSH and GPG keys”下面
3、测试链接
1 | $ ssh -T [email protected] |
如果成功将收到以下消息
Hi xxx! You’ve successfully authenticated, but GitHub does not provide shell access.
很可惜,我没有收到这个消息,配置完之后,还让我输入密码。
二、后来发现输入密码竟然也不能 pull,所以应该不是密钥的问题。
也确认过密码肯定是正确的,后来发现 git clone 竟然也不能执行
用 https 协议
1 | $ git clone https://github.com/xxx.git |
fatal: unable to access ‘https://github.com/xxx.git/‘: Failed to connect to github.com port 443 after 27 ms: Connection refused
用 ssh 协议
1 | $ git clone [email protected]:xxx.git |
Received disconnect from 127.0.0.1 port 22:2: Too many authentication failures
Disconnected from 127.0.0.1 port 22
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
三、最后根据这里的方案解决了
https://stackoverflow.com/questions/58816676/failed-to-connect-to-github-com-port-443-connection-timed-out-when-pushing-to
在 ~/.ssh/config 中配置如下内容
1 | Host github.com |
这个配置我让 ChatGPT 解释了一下
这样的配置是为了通过 SSH 协议访问 GitHub,即使用 SSH 代替 HTTPS 进行连接。这里的配置实现了以下几点:
Host github.com:这是一个主机别名,将github.com与后续配置关联起来。
Hostname ssh.github.com:这是实际要连接的主机名。通过将github.com的主机名更改为ssh.github.com,你将指示 SSH 使用 GitHub 提供的专用 SSH 服务。
Port 443:这是 SSH 连接使用的端口号。将端口号设置为 443 是因为 GitHub 的 SSH 服务在该端口上监听。通过这些配置,当你使用
git clone、git pull或其他 Git 操作时,Git 将使用 SSH 协议通过ssh.github.com和端口 443 连接到 GitHub。这样可以避免了 HTTPS 连接的限制或问题,并允许使用 SSH 密钥进行身份验证。值得注意的是,这个配置只对
github.com生效,对其他主机不会产生影响。你仍然可以使用 HTTPS 连接访问其他网站或 Git 仓库。
所以最终也只能使用 ssh 协议,例如如果关联的是 https 的链接,还是无法生效,所以如果其他仓库还有问题,需要确认下关联的是 https的协议,还是ssh协议。
1 | $ git remote -v |
扫描二维码,分享此文章